package net.yla.smartbus.module.ba.dataServer.mapper;

import net.yla.smartbus.module.ba.dataServer.dto.*;
import net.yla.smartbus.module.ba.dataServer.entity.DataServerDO;
import net.yla.smartbus.module.ba.dataServer.entity.LatLngDO;
import net.yla.smartbus.module.ba.dataServer.entity.LinesInfoDO;
import net.yla.smartbus.module.ba.dataServer.entity.StandLineRLDO;
import net.yla.smartbus.module.ba.dataServer.query.DataServerQuery;
import net.yla.smartbus.module.ba.dataServer.query.DeviceDataServerQuery;
import net.yla.smartbus.module.ba.dataServer.query.VersionInfoQuery;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface DataServerDOMapper {
    int deleteByPrimaryKey(Integer vehicleId);

    int insert(DataServerDO record);

    int insertSelective(DataServerDO record);

    DataServerDO selectByPrimaryKey(Integer vehicleId);

    int updateByPrimaryKeySelective(DataServerDO record);

    int updateByPrimaryKey(DataServerDO record);

    /**
     * 设备主键集合
     * @return
     */
    List<Integer> listDeviceId(DataServerQuery query);

    /**
     * 查询指定设备信息
     * @param query
     * @return
     */
    List<DataServerDTO> listByDeviceQuery(DeviceDataServerQuery query);

    /**
     * 获取所有车辆列表
     * @return
     */
    List<Integer> listVehicleId(DataServerQuery query);

    /**
     * 获取指定列表的车辆信息
     * @param query
     * @return
     */
    List<VehicleInfoDTO> listVehicleInfo(DeviceDataServerQuery query);

    /**
     * 根据车辆id查询设备限速值
     * @param carId
     * @return
     */
    Integer selectDeviceLimitSpeed(@Param("carId") Integer carId);

    /**
     * 获取所有线路列表
     * @return
     */
    List<Integer> listRoutes(DataServerQuery query);

    /**
     * 查询指定列表的线路信息
     * @param query
     * @return
     */
    List<RoutesInfoDTO> listRoutesInfo(DeviceDataServerQuery query);

    /**
     * 根据线路id查询支线列表集合
     * @return
     */
    List<Integer> listLines(@Param("routeId") Integer routeId);

    /**
     * 查询指定线路列表的支线信息
     * @param query
     * @return
     */
    List<LinesInfoDO> listLinesInfo(DeviceDataServerQuery query);

    /**
     * 查询线路支线点集
     * @param lineId
     * @return
     */
    List<LatLngDO> listLinesLatLng(@Param("lineId") Integer lineId,@Param("upDown") Integer upDown);

    /**
     * 获取支线关联的站台列表
     * @param query
     * @return
     */
    List<StandLineRLDO> listStandByLine(DeviceDataServerQuery query);

    /**
     * 获取支线关联的站台id集合
     * @param lineId
     * @param upDown
     * @return
     */
    List<Integer> listStandId(@Param("lineId") Integer lineId,@Param("upDown") Integer upDown);

    /**
     * 获取所有的站点列表
     * @return
     */
    List<Integer> listStationId(DataServerQuery query);

    /**
     * 查询指定站点列表的站点信息
     * @param query
     * @return
     */
    List<StationInfoDTO> listStationInfo(DeviceDataServerQuery query);

    /**
     * 查询指定站点的站台id集合
     * @return
     */
    List<Integer> listStandIds(@Param("stationId") Integer stationId);

    /**
     * 查询指定站台列表的站台信息
     * @param query
     * @return
     */
    List<StandByStandIdDTO> listStandByStandId(DeviceDataServerQuery query);

    /**
     * 查询驾驶员列表
     * @return
     */
    List<Integer> listDriverId(DataServerQuery query);

    /**
     * 查询驾驶员信息
     * @param query
     * @return
     */
    List<DriverInfoDTO> listDriverInfo(DeviceDataServerQuery query);

    /**
     * 查询支线列表信息
     * @return
     */
    List<Integer> listLineId(DataServerQuery query);

    /**
     * 获取所有站台信息
     * @return
     */
    List<Integer> listStandIdInfo(DataServerQuery query);

    /**
     * 查询设备更新记录
     * @param query
     * @return
     */
    List<VersionInfoDTO> listDeviceVersion(VersionInfoQuery query);

    /**
     * 查询设备最新一条更新记录
     * @return
     */
    VersionInfoDTO selectDeviceVersion();

    /**
     * 查询车辆更新记录
     * @param query
     * @return
     */
    List<VersionInfoDTO> listVehicleVersion(VersionInfoQuery query);

    /**
     * 查询设备最新一条记录
     * @return
     */
    VersionInfoDTO selectVehicleVersion();

    /**
     * 查询线路更新记录
     * @param query
     * @return
     */
    List<VersionInfoDTO> listRouteVersion(VersionInfoQuery query);

    /**
     * 查询最新一条线路更新记录
     * @return
     */
    VersionInfoDTO selectRouteVersion();

    /**
     * 查询支线更新记录
     * @param query
     * @return
     */
    List<VersionInfoDTO> listLineVersion(VersionInfoQuery query);

    /**
     * 查询最新一条支线更新记录
     * @return
     */
    VersionInfoDTO selectLineVersion();

    /**
     * 查询站点更新记录
     * @param query
     * @return
     */
    List<VersionInfoDTO> listStationVersion(VersionInfoQuery query);

    /**
     * 查询最新一条更新记录
     * @return
     */
    VersionInfoDTO selectStationVersion();

    /**
     * 查询站台更新记录
     * @param query
     * @return
     */
    List<VersionInfoDTO> listStandVersion(VersionInfoQuery query);

    /**
     * 查询最新一条站台更新记录
     * @return
     */
    VersionInfoDTO selectStandVersion();

    /**
     * 查询驾驶员更新记录
     * @param query
     * @return
     */
    List<VersionInfoDTO> listDriverVersion(VersionInfoQuery query);

    /**
     * 查询最新一条驾驶员更新记录
     * @return
     */
    VersionInfoDTO selectDriverVersion();
}